home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 11587 / 11587.xpi / chrome / aviary.jar / content / pearlutil-clipboard.js < prev    next >
Text File  |  2009-05-12  |  3KB  |  91 lines

  1. /* Copyright (c) 2006-2009 Pearl Crescent, LLC.  All Rights Reserved. */
  2. /* vim: set sw=2 sts=2 ts=8 et syntax=javascript: */
  3.  
  4. if (!com) var com = {};
  5. if (!com.aviary) com.aviary = {};
  6. if (!com.aviary.talon) com.aviary.talon = {};
  7. if (!com.aviary.talon.clipboard) com.aviary.talon.clipboard =
  8. {
  9.   CopyDataURIToClipboard: function(aDataURI, aCompletionFunc)
  10.   {
  11.     var _this = this;
  12.     var imageContainer = null;
  13.  
  14.     function notifyCompletion(aDidSucceed)
  15.     {
  16.       if (imageContainer)
  17.       {
  18.         imageContainer.parentNode.removeChild(imageContainer);
  19.         imageContainer = null;
  20.       }
  21.  
  22.       if (aCompletionFunc)
  23.         aCompletionFunc(aDidSucceed);
  24.     }
  25.  
  26.     function createImageForCopy()
  27.     {
  28.       var navbar = document.getElementById("nav-bar");
  29.       if (!navbar)
  30.         return null;
  31.  
  32.       const kXULNameSpace = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
  33.       const kHTMLNameSpace = "http://www.w3.org/1999/xhtml";
  34.       var sbElem = document.createElementNS(kXULNameSpace, "scrollbox");
  35.       sbElem.setAttribute("width", 1);
  36.       sbElem.setAttribute("height", 1);
  37.       var imgElem = document.createElementNS(kHTMLNameSpace, "img");
  38.       imgElem.setAttribute("style", "display:none");
  39.       sbElem.appendChild(imgElem);
  40.       navbar.appendChild(sbElem);
  41.       imageContainer = sbElem;
  42.       return imgElem;
  43.     }
  44.  
  45.     try
  46.     {
  47.       var imgElem = createImageForCopy();
  48.       if (!aDataURI || !imgElem)
  49.       {
  50.         notifyCompletion(false);
  51.         return;
  52.       }
  53.  
  54.       function onImageLoad()
  55.       {
  56.         var tmpNode = document.popupNode;
  57.         document.popupNode = imgElem;
  58.         goDoCommand("cmd_copyImageContents");
  59.         document.popupNode = tmpNode;
  60.         cleanupImageForCopy();
  61.         notifyCompletion(true);
  62.       }
  63.  
  64.       function onImageError()
  65.       {
  66.         cleanupImageForCopy();
  67.         notifyCompletion(false);
  68.       }
  69.  
  70.       function cleanupImageForCopy()
  71.       {
  72.         imgElem.removeEventListener("load", onImageLoad, false);
  73.         imgElem.removeEventListener("error", onImageError, false);
  74.         imgElem.removeAttribute("src");
  75.       }
  76.  
  77.       imgElem.QueryInterface(Components.interfaces.nsIImageLoadingContent);
  78.       imgElem.addEventListener("load", onImageLoad, false);
  79.       imgElem.addEventListener("error", onImageError, false);
  80.       imgElem.setAttribute("src", aDataURI);
  81.       // NOTE: onImageLoad() or onImageError() will report status.
  82.     }
  83.     catch (e)
  84.     {
  85.       notifyCompletion(false);
  86.     }
  87.   }, // CopyDataURIToClipboard
  88.  
  89.   endOfObject: true
  90. }; // com.aviary.talon.clipboard
  91.